package br.folhapgto.dao;

import br.folhapgto.dao.banco.Conexao;
import br.folhapgto.dao.idao.IEmpregadoHoristaDAO;
import br.folhapgto.model.EmpregadoHorista;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class EmpregadoHoristaDAO implements IEmpregadoHoristaDAO{
	
	private static EmpregadoHoristaDAO instanciaUnica = new EmpregadoHoristaDAO();

    public static EmpregadoHoristaDAO getInstanciaUnica() 
    {
        return instanciaUnica;
    }

    // Construtor
    public EmpregadoHoristaDAO()
    {
    	
    }
    
    // M�todos CRUD
    public EmpregadoHorista carregaDados(ResultSet rs) throws SQLException
    {
    	EmpregadoHorista empregado = new EmpregadoHorista();
        
    	empregado.setIdEmpregado(rs.getInt("idEmpregado"));
        empregado.setNome(rs.getString("nome"));
        empregado.setEndereco(rs.getString("endereco"));
        empregado.setSindicato(rs.getInt("sindicato"));
        empregado.setValorHora(rs.getFloat("valorSalario"));
                
        return empregado;
    }
    
    public Integer gravar(EmpregadoHorista empregado)
    {

        int retornoBanco = 0;
        Connection conn = Conexao.getInstanciaUnica().criaConexao();

        if (conn != null) {
            PreparedStatement pstmt = null;
            try {
                pstmt = conn.prepareStatement(
                        "INSERT INTO TB_EMPREGADO (nome, " + 
                        "endereco, " +
                        "sindicato, " +
                        "valorSalario, " +
                        "comissionado, " +
                        "tipoContrato)" +
                        " VALUES (?, ?, ?, ?, ?, ?)");
                pstmt.setString(1, empregado.getNome());
                pstmt.setString(2, empregado.getEndereco());
                pstmt.setInt(3, empregado.getSindicato());
                pstmt.setFloat(4, empregado.getValorHora());
        		pstmt.setBoolean(5, false);
				pstmt.setInt(6, 2);
				retornoBanco = pstmt.executeUpdate();
            } catch (SQLException e) {
                System.out.println("Inclusao Falhou!!!\n" + e.getMessage());
            } finally {
                try {
                    if (pstmt != null) {
                        pstmt.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
        }

        return retornoBanco;
    }
    
	public List<EmpregadoHorista> lerTodos()
    {
    	Statement stmt = null;
        List<EmpregadoHorista> empregados = new ArrayList<EmpregadoHorista>();
        
        Connection conn = Conexao.getInstanciaUnica().criaConexao();
        
        if (conn != null) {
            try {
                stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(
                        "SELECT * FROM TB_EMPREGADO WHERE tipoContrato = 2");
                rs.last();
                rs.beforeFirst();
                while (rs.next()) {
                	empregados.add(carregaDados(rs));
                }
                conn.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (stmt != null) {
                        stmt.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
        return empregados;
    }

	public EmpregadoHorista ler(Integer idEmpregado)
	{
		Statement stmt = null;
		EmpregadoHorista empregado = null;
        Connection conn = Conexao.getInstanciaUnica().criaConexao();
        
        if (conn != null) {
            try {
                stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(
                        "SELECT * FROM TB_EMPREGADO WHERE idEmpregado = " +
                        idEmpregado);
                if (rs.next()) {
                    empregado = carregaDados(rs);
                } else {
                    empregado = null;
                }
                conn.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (stmt != null) {
                        stmt.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
        return empregado;
	}
	
	public Integer remover(Integer idEmpregado)
	{
		int n = 0;
        Statement stmt = null;
        Connection conn = Conexao.getInstanciaUnica().criaConexao();

        if (conn != null) {
            try {
                stmt = conn.createStatement();
                n = stmt.executeUpdate(
                        "DELETE FROM TB_EMPREGADO WHERE idEmpregado = " +
                        idEmpregado);
                conn.close();
            } catch (SQLException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (stmt != null) {
                        stmt.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
        return n;
	}
	
	public Integer alterar(EmpregadoHorista empregado)
	{
		int n = 0;
        Connection conn = Conexao.getInstanciaUnica().criaConexao();

        if (conn != null) {
            PreparedStatement pstmt = null;
            try {
                pstmt = conn.prepareStatement(
                        "UPDATE TB_EMPREGADO SET " +
                        "nome = ?, " + 
                        "endereco = ?, " +
                        "sindicato = ?, " +
                        "valorSalario = ?, " +
                        "comissionado = ?, " +
                        "tipoContrato =? " +
                        "WHERE idEmpregado = ?");
                
                pstmt.setString(1, empregado.getNome());
                pstmt.setString(2, empregado.getEndereco());
                pstmt.setInt(3, empregado.getSindicato());
                pstmt.setFloat(4, empregado.getValorHora());
        		pstmt.setBoolean(5, false);
				pstmt.setInt(6, 2);
				pstmt.setInt(7, empregado.getIdEmpregado());
				
                n = pstmt.executeUpdate();
                conn.close();
                
            } catch (SQLException ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (pstmt != null) {
                        pstmt.close();
                    }
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
        return n;
	}
}
